package busco

import (
	"wails/schema/enums/battleenum"
	"wails/schema/enums/busenum"
)

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件
type B条件 struct {
	// 条件的结果失败时所显示的错误
	// @alias 失败提示
	S失败提示 string
	// 主要用于提供是否开启的修正
	// @alias 禁用
	J禁用 bool
	// @alias 取反
	Q取反 bool
	// 如果条件存在对应的事件，监听并调用所在对象的Update函数
	// @alias 监听
	J监听 bool
	// @alias 所在主体
	S所在主体 busenum.C查找主体种类
	// 优先级 与 > 或
	// @alias 与
	Y与 string `link:"条件"`
	// 优先级 与 > 或
	// @alias 或
	Y或 string `link:"条件"`
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡槽
type B条件_卡槽 struct {
	B条件

	// @alias 卡槽
	K卡槽 *S查找卡槽
}

// 【指定卡槽】是否存在【指定卡片】
// 移入移出时会触发更新
// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡槽_存在卡片
type B条件_卡槽_存在卡片 struct {
	B条件_卡槽

	// 存在指定配置编号的卡片
	// @alias 指定卡片
	Z指定卡片 string

	// 存在指定属性的卡片
	// @alias 指定属性
	S指定属性 map[string]string `link:"属性"`

	// 存在指定扩展属性的卡片
	// @alias 指定扩展属性
	K扩展属性 map[string]interface{} `_type:"扩展属性比较"`

	// 存在已激活的卡片
	// @alias 已激活
	Y已激活 bool
}

// 所在主体必须为卡片?
// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片
type B条件_卡片 struct {
	B条件
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片_所在卡包
type B条件_卡片_所在卡包 struct {
	B条件_卡片

	// @alias 所在卡包
	S所在卡包 *S查找卡包
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片_所在卡槽
type B条件_卡片_所在卡槽 struct {
	B条件_卡片

	// @alias 所在卡槽
	S所在卡槽 *S查找卡槽
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片_属性
type B条件_卡片_属性 struct {
	B条件_卡片
	//
	// @alias 属性
	S属性 string `link:"属性"`
	// @alias 比较
	B比较 battleenum.E数字比较
	// @alias 值
	Z值 int
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片_扩展属性
type B条件_卡片_扩展属性 struct {
	B条件_卡片
	//
	// @alias 扩展属性
	Y扩展属性 interface{} `_type:"扩展属性比较"`
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_卡片_数量
type B条件_卡片_数量 struct {
	B条件_卡片
	// @alias 比较
	B比较 battleenum.E数字比较
	// @alias 值
	Z值 int
}

// 判断是否在时间范围之内(或之外)
// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_时间
type B条件_时间 struct {
	B条件

	// @alias 开始时间
	K开始时间 *S查找时间

	// @alias 结束时间
	J结束时间 *S查找时间

	// @alias 优先级
	Y优先级 int
}

// @schema_export --ident=schema --json
// --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_计时
type B条件_计时 struct {
	B条件

	// @alias 开始时间
	K开始时间 *S查找时间

	// 距离【开始时间】达到【时长】后，满足条件
	// @alias 时长
	S时长 int

	// 计时结束后，重置条件
	// @alias 允许重置
	Y允许重置 bool
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_角色属性
type B条件_角色属性 struct {
	B条件
	// @alias 比较
	B比较 battleenum.E数字比较
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_主体
type B条件_主体 struct {
	B条件

	// @alias 位置
	W位置 T条件主体位置
	// @alias 比较
	B比较 battleenum.E数字比较
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_等级
type B条件_等级 struct {
	B条件
	// @alias 等级
	D等级 string `link:"等级"`
	// @alias 比较
	B比较 battleenum.E数字比较
	// @alias 值
	Z值 bool
	// @alias 比较等阶
	B比较等阶 bool
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_公式
type B条件_公式 struct {
	B条件
	// 由公式决定
	// @alias 值
	Z值 bool
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_主体属性
type B条件_主体属性 struct {
	B条件_主体

	//
	// @alias 属性
	S属性 string `link:"属性"`
	// @alias 值
	Z值 int
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_父卡包
type B条件_父卡包 struct {
	B条件

	S卡片 *S查找卡片集合
	// @alias 等于卡包
	D等于卡包 string `link:"卡包"`
}

type T条件主体位置 int

const (
	// 使用所在卡包的修正目标
	T条件主体位置_卡片 T条件主体位置 = iota
	T条件主体位置_父主体
	T条件主体位置_角色
	T条件主体位置_队伍
)

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_得分
type B条件_得分 struct {
	B条件

	// @alias 得分
	T得分 *S查找得分
	// @alias 比较
	B比较 battleenum.E数字比较
	// 格式如下:
	// ^最小值
	// $最大值
	// %100, 最大值的百分比
	// 具体值
	// @alias 数量
	S数量 string
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_战斗结果
type B条件_战斗结果 struct {
	B条件

	// @alias 得分
	T得分 *S查找得分
	// @alias 战斗结果
	Z战斗结果 busenum.Z战斗结果
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_副本
type B条件_副本 struct {
	B条件

	// @alias 副本
	T副本 *S查找副本
	// @alias 比较
	B比较 battleenum.E数字比较
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_副本_阶段
type B条件_副本_阶段 struct {
	B条件_副本

	// @alias 阶段
	J阶段 busenum.F副本阶段
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_任务
type B条件_任务 struct {
	B条件

	// @alias 任务
	R任务 *S查找任务
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_任务_比较任务状态
type B条件_任务_比较任务状态 struct {
	B条件_任务

	// @alias 任务状态
	R任务状态 busenum.R任务状态
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_任务_比较任务状态
type B条件_任务_比较任务结果 struct {
	B条件_任务

	// @alias 任务结果
	R任务结果 busenum.R任务结果
}

// @schema_export --ident=schema --json --config=条件
// @schema_go
// @cache_go
// @cache_ts
// @alias 条件_任务_比较领取状态
type B条件_任务_比较领取状态 struct {
	B条件_任务

	// @alias 领取状态
	L领取状态 busenum.J角色领取状态
}

// @schema_go
type SEffectWhichUnit struct {
	// @alias 执行
	// 往上追溯指定执行
	X执行 string `link:"执行"`
}
